#ifndef  PDU_H
#define  PDU_H

#include "option.h"
#include "SMS.h"

typedef struct _pdu_u16
{
    int length;
    const char *string;
    uint16_t* u16_array;
}pdu_t;


typedef struct _pdu_option_params 
{
    char save_option_flag; //是否处理参数 0 -不处理  1 -处理
    int num;      //大棚序号
    int temp[2];  //温度参数
    int humd[2];  //湿度参数
    struct _pdu_set_time
    {
        uint16_t start_time;   //报警开始时间
        uint16_t stop_time;    //报警结束时间
    }time;
    char telnum[12]; //保存电话号码
    char query_tel; //查询手机号码 0-不处理 1-执行查询
    char query_dp; //查询大棚  0-不处理 1-执行查询
}pdu_option_params_t;


//语法关键字处理，关键字、方法关联数组
typedef struct _pdu_key_handle
{
    char *key;                              //关键字
    int (*func)(char *data, int len);   //处理函数
}pdu_key_handle_t;

enum pdu_cmd_type{
    PDU_SET_OPTION, //命令类型为设置
    PDU_QUERY,      //命令类型为查询
};

//pdu语法解析错误类型, 给pdu_error_handle()使用
enum pdu_parse_error{
    PDU_PARSE_PARAMS, //参数错误
    PDU_PARSE_FORMAT, //数据格式错误
    PDU_PARSE_TIME, //时间格式错误
    PDU_PARSE_TELERROR, //手机号码错误
    PDU_PARSE_UNKNOWN, //未知错误
    PDU_PARSE_NO_DPNUM,//缺少大棚序号
    PDU_PARSE_TEMP_PARAMS, //温度参数错误
    PDU_PARSE_HUM_PARAMS, //湿度参数错误  
    PDU_PARSE_NO_PARAM, //设置大棚缺少参数
    PDU_PARSE_ENUM_MAX,
};


void  pdu_decode(const char *str, int len);
int     pdu_parse(char *src);
void    pdu_destroy(pdu_t* pdu);

int pdu_cmd_handle_resp_stat(char cmd, char param);//回复命令执行数据

void pdu_option_init (option_t *option);


#endif  /*PDU_H*/
